]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
layout: Don't update the input region while we have a modal
authorJasper St. Pierre <jstpierre@mecheye.net>
Sat, 20 Sep 2014 00:54:31 +0000 (18:54 -0600)
committerJasper St. Pierre <jstpierre@mecheye.net>
Tue, 30 Sep 2014 06:23:48 +0000 (00:23 -0600)
If we have a modal, the stage's input region doesn't really matter --
all events go to us anyway. To avoid doing extra work doing animations
when we have a modal, like menus, the overview, and the message tray,
just fizzle out all updates.

To make sure we catch updates, update the input region whenever we end a
modal.

https://bugzilla.gnome.org/show_bug.cgi?id=737001

js/ui/layout.js
js/ui/main.js

index 5019036df33bee94bf9d3a23c4c49f543dffcfd1..0c7a1342619b0c1fff4a15304086f396a47cf2df 100644 (file)
@@ -259,7 +259,6 @@ const LayoutManager = new Lang.Class({
 
         this._inOverview = true;
         this._updateVisibility();
-        this._updateRegions();
     },
 
     hideOverview: function() {
@@ -267,7 +266,6 @@ const LayoutManager = new Lang.Class({
 
         this._inOverview = false;
         this._updateVisibility();
-        this._queueUpdateRegions();
     },
 
     _sessionUpdated: function() {
@@ -915,9 +913,6 @@ const LayoutManager = new Lang.Class({
     },
 
     _queueUpdateRegions: function() {
-        if (Main.sessionMode.isGreeter)
-            return;
-
         if (this._startingUp)
             return;
 
@@ -951,13 +946,16 @@ const LayoutManager = new Lang.Class({
     },
 
     _updateRegions: function() {
-        let rects = [], struts = [], i;
-
         if (this._updateRegionIdle) {
             Meta.later_remove(this._updateRegionIdle);
             delete this._updateRegionIdle;
         }
 
+        // No need to update when we have a modal.
+        if (Main.modalCount > 0)
+            return GLib.SOURCE_REMOVE;
+
+        let rects = [], struts = [], i;
         let isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow);
         let wantsInputRegion = !isPopupMenuVisible;
 
@@ -1043,7 +1041,13 @@ const LayoutManager = new Lang.Class({
         }
 
         return GLib.SOURCE_REMOVE;
-    }
+    },
+
+    modalEnded: function() {
+        // We don't update the stage input region while in a modal,
+        // so queue an update now.
+        this._queueUpdateRegions();
+    },
 });
 Signals.addSignalMethods(LayoutManager.prototype);
 
index be69ca1495f4dd2947e709d7d0819d060873012b..f9bb59efb302de0d121fc4923c154f99184ce6b0 100644 (file)
@@ -454,6 +454,7 @@ function popModal(actor, timestamp) {
     if (modalCount > 0)
         return;
 
+    layoutManager.modalEnded();
     global.end_modal(timestamp);
     Meta.enable_unredirect_for_screen(global.screen);
     keybindingMode = Shell.KeyBindingMode.NORMAL;